// Copyright 2010 ESRI
// 
// All rights reserved under the copyright laws of the United States
// and applicable international laws, treaties, and conventions.
// 
// You may freely redistribute and use this sample code, with or
// without modification, provided you include the original copyright
// notice and use restrictions.
// 
// See the use restrictions at http://help.arcgis.com/en/sdk/10.0/usageRestrictions.htm
// 

using System;
public class PointTool : ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools.IMapServerToolAction
{
	#region IMapServerToolAction Members

	public void ServerAction(ESRI.ArcGIS.ADF.Web.UI.WebControls.ToolEventArgs toolEventArgs)
	{
		// Get a reference to the Map control on which the tool was executed
		ESRI.ArcGIS.ADF.Web.UI.WebControls.Map adfMap = null;
		adfMap = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)toolEventArgs.Control;

		// Get the point clicked by the user
		ESRI.ArcGIS.ADF.Web.UI.WebControls.MapPointEventArgs mapPointEventArgs = (ESRI.ArcGIS.ADF.Web.UI.WebControls.MapPointEventArgs)toolEventArgs;
		ESRI.ArcGIS.ADF.Web.Geometry.Point adfPoint = mapPointEventArgs.MapPoint;

		// Convert the Web ADF input point to its ArcGIS Server specific equivalent
		ESRI.ArcGIS.ADF.ArcGISServer.PointN agsSoapPoint = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.FromAdfPoint(adfPoint);

		// Get an ArcGIS Server specific map functionality.  Note this code assumes the existence of an ArcGIS
		// Server resource item with the name "MapResourceItem0"
        ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality agsMapFunctionality = (ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality)(adfMap.GetFunctionality("BTGISWASECO"));

		// Get the ArcGIS Server MapDescription for the resource
		ESRI.ArcGIS.ADF.ArcGISServer.MapDescription agsSoapMapDescription = agsMapFunctionality.MapDescription;

		// Create a green ArcGIS Server data source specific color object
		ESRI.ArcGIS.ADF.ArcGISServer.RgbColor agsSoapRgbColor = new ESRI.ArcGIS.ADF.ArcGISServer.RgbColor();
		agsSoapRgbColor.Red = 0;
		agsSoapRgbColor.Green = 255;
		agsSoapRgbColor.Blue = 0;
		agsSoapRgbColor.AlphaValue = 255;

		// Initialize an ArcGIS Server data source specific marker symbol as a diamond with the color initialized above
		ESRI.ArcGIS.ADF.ArcGISServer.SimpleMarkerSymbol agsSoapSimpleMarkerSymbol = new ESRI.ArcGIS.ADF.ArcGISServer.SimpleMarkerSymbol();
		agsSoapSimpleMarkerSymbol.Style = ESRI.ArcGIS.ADF.ArcGISServer.esriSimpleMarkerStyle.esriSMSDiamond;
		agsSoapSimpleMarkerSymbol.Color = agsSoapRgbColor;
		agsSoapSimpleMarkerSymbol.Size = 20.0;

		// Create an ArcGIS Server data source specific marker element with the marker symbol and input point
		ESRI.ArcGIS.ADF.ArcGISServer.MarkerElement agsSoapMarkerElement = new ESRI.ArcGIS.ADF.ArcGISServer.MarkerElement();
		agsSoapMarkerElement.Symbol = agsSoapSimpleMarkerSymbol;
		agsSoapMarkerElement.Point = agsSoapPoint;

		// If the current resource does not have any custom graphics specified, initialize this property with
		// a new array with just the newly created graphics element.  Otherwise, create a new array with both
		// the current custom graphics and teh newly created element.
		if (agsSoapMapDescription.CustomGraphics != null)
		{
			// Create a new ArcGIS Server graphic element array with a size that is one bigger than the
			// resource's current element array
			int elementCount = agsSoapMapDescription.CustomGraphics.Length;
			ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[] agsSoapGraphicElementArray = new ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[elementCount + 1];

			// Copy the resource's current element graphic array to the new array
			agsSoapMapDescription.CustomGraphics.CopyTo(agsSoapGraphicElementArray, 0);

			// Add the newly created point element to the array
			agsSoapGraphicElementArray[elementCount] = agsSoapMarkerElement;

			// Update the resource's element array with the new array
			agsSoapMapDescription.CustomGraphics = agsSoapGraphicElementArray;
		}
		else
		{
			// Create a new ArcGIS Server graphic element array with only the newly created point element
			ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[] agsSoapGraphicElement = new ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[1];
			agsSoapGraphicElement[0] = agsSoapMarkerElement;

			// Update the resource's element array with the new array
			agsSoapMapDescription.CustomGraphics = agsSoapGraphicElement;
		}

		// Refresh the resource so the new point is shown
		adfMap.RefreshResource(agsMapFunctionality.Resource.Name);
	}

	#endregion
}
